package com.nageoffer.shortlink.project.toolkit;

import jakarta.servlet.http.HttpServletRequest;


public class IpUtil {

    /**
     * 获取客户端真实 IP 地址
     * @param request HttpServletRequest
     * @return 客户端 IP 地址
     */
    public static String getClientIpAddress(HttpServletRequest request) {
        String ip;

        // 1. 先从 X-Forwarded-For 获取（代理链中最早的 IP）
        ip = request.getHeader("X-Forwarded-For");
        if (isValidIp(ip)) {
            // 有可能是多个 IP，取第一个
            int index = ip.indexOf(',');
            return index != -1 ? ip.substring(0, index).trim() : ip.trim();
        }

        // 2. 再从 X-Real-IP 获取（常用于 Nginx 设置）
        ip = request.getHeader("X-Real-IP");
        if (isValidIp(ip)) {
            return ip.trim();
        }

        // 3. 回退到 request.getRemoteAddr()
        ip = request.getRemoteAddr();

        // 处理 IPv6 本地回环地址
        if ("0:0:0:0:0:0:0:1".equals(ip) || "::1".equals(ip)) {
            return "127.0.0.1";
        }

        return ip;
    }

    /**
     * 判断 IP 字符串是否有效
     */
    private static boolean isValidIp(String ip) {
        return ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip);
    }
}
